Programming Assignment Policies
         
            
         
         
            1 Purpose of Programming Assignments in this Course
    In this course, programming assignments are primarily an
    instructional mechanism, not an assessment mechanism. Nonetheless,
    programming assignments will be graded and, in fact, will be graded
    strictly. There are two reasons for this. First, the grades will
    provide you with an assessment of how well you know the
    material. Second, experience has shown that beginning Computer Science
    students do not always make decisions that are in their own best
    interest, and often do not complete ungraded assignments.
    
    In other words, in this course, programming assignments are designed
    to: (1) help you learn the materials; (2) help you understand what you
    have and have not learned; and (3) encourage you to do the work that
    is necessary for learning to occur.
    
          
         
            2 Collaboration
            Different courses have different policies about collaboration
    on programming programming assignments. This document describes the
    policy for Prof. Bernstein's sections of this course during this semester 
    only. Be careful to understand and comply with the policies
    that are in place for your other courses.
    
    Failure to comply with these policies is a violation of the
    JMU Honor Code. Automated tools (like, for example, 
    Moss) may
    be used on any submission (including "early" submissions), at
    any time, to detect violations of this policy.
    
            
               
2.1 Rationale for the Collaboration Policy
      Unambiguously, the best way for you to achieve the second
      objective above is for you to complete programming assignments
      entirely on your own, occasionally asking questions of a general
      nature (i.e., about the topics you need to understand in order
      to complete assignment but not specifics about the assignment
      itself). However, for some students, collaboration aids in
      achieving the first objective.
      
            
               
2.2 Allowed Interactions
      You may discuss programming assignments with the instructor(s)
      for this course, instructors for other courses, and other
      students currently enrolled in this course.
      
            
               2.3 Inappropriate Interactions
      You must not discuss programming assignments with students
      who are not currently enrolled in this course,
      
including teaching/lab assistants.
      
      Also, you must not discuss programming assignments with tutors
      of any kind – paid or volunteer, local or remote.   Similarly, you
      must not use code from any source, whether human (e.g.,
      "mechanical turk") or not (e.g., AI-based code generators), that
      was created based on information that is specific to the
      assignment (e.g., specifications, function/method/class
      declarations). When in doubt, assume that code obtained from the
      Internet must not be used.
      
               
      Finally, you must not make your solutions to programming
      assignments available in any form on any WWW sites, solution
      archives, etc... and you must not get your solutions from such
      sites (though you may use fragments of code that you find on the WWW).
      
             
            
               2.4 Recommended Interactions
               You are strongly encouraged to discuss the assignment only with
      the instructor(s), and to	submit work that is entirely your own.
      
      Assistance can be a crutch that actually hinders learning.  You
      will be much more successful at learning the material in this
      course if you complete the programming assignments independently
      [with, perhaps, assistance from the instructor(s)].  Though you
      may lose some points on the programming assignments if you take
      this approach, it will almost certainly help you on exams (which
      are a much larger portion of the final grade).
      
             
            
               2.5 Courtesy/Etiquette
      Though you are entitled to discuss the programming assignments
      with other people, you must be courteous.
      
      Most importantly, other students in the course are not required, or even
      encouraged, to provide assistance. So, if asked, you should feel
      free to decline such a request and, if asking, you must not take
      offense if such a request is denied.
      
               
      In addition, the instructor(s) may not provide as much
      assistance as you want. Most frequently, this happens when they
      think the assistance you have requested will prevent you from
      learning an important concept. Sometimes, this happens when they
      think you are using too much of their time. Again, you must not
      take offense if a request is denied.
      
                 
          
         
            3 Submission
    Obviously, all of the programming assignments will involve the
    construction of code. The code must be submitted electronically using 
    
Autolab.  
    In addition, parts of some programming assignments may require you
    to answer questions of various kinds.  These parts must be
    submitted using Canvas.
      
               3.1 Number of Autolab Submissions
      Autolab is a submission tool, not a testing tool. That is, it
      tests your code for purposes of assessment, not to verify the
      correctness of your code and not to help you debug your
      code. Testing and debugging are an important part of the
      software engineering process, and you must be able to test and
      debug software in order to succeed in this course (not to
      mention subsequent courses and as a practicing
      programmer/software engineer).
  
      
      To prevent you from relying on Autolab too heavily, individual
      assignments may have a maximum number of submissions (perhaps
      after a certain date) and/or points may be deducted for each
      submission.
      
               
      You are responsible for knowing the submission rules for each
      assignment. In general, your last submission is the one that
      will be graded.
      
             
            
               3.2 Timing of Autolab Submissions
      You are responsible for ensuring that your assignments are
      submitted on time. You should be aware that electronic
      submission systems may only be able to process a few submissions
      per minute. This means that, when there are hundreds of students
      in different courses submitting at the same time, it might take
      an hour or more for a submission to be processed.
      
                  Your submission must be processed/checked by Autolab before the
      time that it is due. It is not enough to have it "in the
      queue" before the deadline.
      
               
      In other words, you must recognize that the system might be
      severely congested and submit your code early enough that the
      processing time will not be a problem. (This is not unlike a
      situation in which you need to be someplace at a specific time
      and you know that the roads might be congested. You are
      responsible for departing early enough; you must select a
      departure time that accounts for the congestion.)
      
             
          
         
            4 Grading
    Points will be deducted for a variety of reasons, including:
    incorrect answers, failing the tests conducted as part of the
    electronic submission process, failing to conform to the course
    style guide, failing to be properly documented, poor design, poor
    implementation, and inelegance. Each assignment will include a
    description of the criteria that will be used for it.
    
    Some criteria will be graded by the submission system (when you
    submit) and others will be graded by the instructor after the
    due date. Note that the grade awarded by the submission system is an
    estimate, not a guarantee. In other words, the grade awarded by
    the submission system may be modified by the instructor.
    
            
    Unless stated otherwise, programming assignments must be submitted
    on or before the due date and time. Programming assignments submitted
    after the due date/time will not be accepted.
            
          
         
            
5 Definitions
    Terms, equations, concepts, etc... often have multiple definitions.
    Whenever there is any ambiguity, you must use the definitions that
    are provided with the assignment.